sort() 和 sorted() 的比較
定義
# 創建一個列表
numbers = [5, 2, 9, 1, 5, 6]
# 使用 sort() 進行升序排序
numbers.sort()
print(numbers) # 輸出:[1, 2, 5, 5, 6, 9]
# 使用 sort() 進行降序排序
numbers.sort(reverse=True)
print(numbers) # 輸出:[9, 6, 5, 5, 2, 1]
# 使用 key 參數來根據絕對值排序
numbers = [-5, -1, 2, -3]
numbers.sort(key=abs)
print(numbers) # 輸出:[-1, 2, -3, -5]
定義
sorted() 是一個內置函數,可以對任何可迭代對象(如列表、元組、集合、字符串等)進行排序。
它不會改變原始數據,而是返回一個新的已排序的列表。
語法
sorted(iterable, key=None, reverse=False)
參數:
iterable:要排序的可迭代對象。
key:可選,指定一個函數,用於從每個可迭代元素中提取一個用於比較的鍵。
reverse:可選,布林值,若設為 True,則將列表按降序排序。
# 創建一個列表
numbers = [5, 2, 9, 1, 5, 6]
# 使用 sorted() 進行升序排序
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 輸出:[1, 2, 5, 5, 6, 9]
print(numbers) # 輸出:[5, 2, 9, 1, 5, 6] (原始列表不變)
# 使用 sorted() 進行降序排序
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc) # 輸出:[9, 6, 5, 5, 2, 1]
# 使用 key 參數來根據絕對值排序
numbers = [-5, -1, 2, -3]
sorted_numbers_abs = sorted(numbers, key=abs)
print(sorted_numbers_abs) # 輸出:[-1, 2, -3, -5]
參數 reverse=True 的詳細解釋
默認行為:如果你不指定 reverse 參數(或使用默認的 reverse=False),排序結果會是從小到大的升序排序。
使用 reverse=True:當你指定 reverse=True 時,sorted() 函數會將結果反轉,從大到小排序,這就是降序排序。
在 Python 中,字典(dictionary)本身是一種無序的數據結構,因此無法直接對字典進行排序。然而,我們可以使用 sorted()
函數來根據字典的鍵或值進行排序,並返回排序後的結果(通常以元組列表的形式)。
這樣我們就能依據不同的需求對字典進行靈活的排序操作。
my_dict = {'apple': 3, 'banana': 1, 'cherry': 2}
升序按**鍵**排序
要根據字典的鍵進行升序排序,可以直接對字典的鍵使用 sorted():
sorted_by_keys = sorted(my_dict) # 只返回排序後的鍵
print(sorted_by_keys) # 輸出:['apple', 'banana', 'cherry']
# 如果你想要得到排序後的鍵-值對:
sorted_dict_by_keys = dict(sorted(my_dict.items()))
print(sorted_dict_by_keys) # 輸出:{'apple': 3, 'banana': 1, 'cherry': 2}
特點 | sort() |
sorted() |
---|---|---|
用法 | 列表的方法 | 內置函數 |
返回值 | None (原地排序,不返回值) |
返回新的排序後的列表 |
作用對象 | 僅限於列表 | 任何可迭代對象(如列表、元組等) |
改變原始數據 | 會改變原始列表 | 不會改變原始數據 |
排序方式 | 可以升序或降序排序 | 可以升序或降序排序 |
使用 key 參數 |
支持 | 支持 |
1.不改變原始數據:
sorted() 不會修改原始的可迭代對象,它會返回一個新的已排序列表。這對於保持數據完整性特別重要,避免無意中改變了原始數據。
2.適用於所有可迭代對象:
sorted() 不僅適用於列表,還可以對元組、集合、字符串等進行排序,而 sort() 只能用於列表。這使得 sorted() 更加通用。
3.靈活性:
無論你是對列表進行排序,還是對其他不可變對象(如 tuple、set)進行排序,sorted() 都能應對。而且,它與 key 和 reverse 參數的配合使用也相當靈活。
儘管 sorted() 很好,但在某些情況下使用 sort() 仍有它的價值:
當你想對一個列表進行就地排序時,可以使用 sort() 方法。
這種方法適合在你不需要保留原始列表的情況下進行排序。
當你需要對其他可迭代對象進行排序,或需要保留原始數據時,使用 sorted() 函數。
sorted() 是更通用和靈活的選擇,因為它可以用於多種類型的數據。